home *** CD-ROM | disk | FTP | other *** search
- unit xUpgrade;
- { can be used to upgrade programs. The class should be used
- at a very early stage in program run }
-
- {
- it uses an INI file to store the current version
-
- the TxUpgrader must be inherited and overwrite
- the virtual Upgrade method in the following form :
-
- function TMyUpgrader.Upgrade(aVersion: Integer): Integer;
- begin
- Result := inherited Upgrade(aVersion);
- if aVersion < 110 then
- try
- ... do the upgrade for Version 1.10
- Result := 110;
- except
- end
- else if aVersion < 120 then
- try
- ... do the upgrade for Verison 1.20
- Result := 120;
- except
- end;
- end;
-
- To start the upgrade process simply call the "Execute" method.
- This method call "Upgrade" until no different version number was
- returned by the function.
-
- The following would initate a complete upgrade process :
-
- with TMyUpgrader.Create('DB') do
- try
- Execute;
- finally
- Free;
- end;
- }
-
- interface
-
- uses
- SysUtils, Classes, IniFiles;
-
- type
- TxUpgrader = class
- private
- fIniFile : TIniFile;
- fSection : String;
- procedure SetVersion(Value: Integer);
- function GetVersion: Integer;
- public
- constructor Create(const aSection: String);
- destructor Destroy; override;
-
- procedure Execute;
- function Upgrade(aVersion: Integer): Integer; virtual;
-
- property Version: Integer read GetVersion write SetVersion;
- end;
-
- implementation
-
- const
- INI_VERSION = 'VERSION';
-
- constructor TxUpgrader.Create(const aSection: String);
- begin
- inherited Create;
- fSection:=aSection;
- fIniFile:=TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));
- end;
-
- destructor TxUpgrader.Destroy;
- begin
- fIniFile.Free;
- inherited Destroy;
- end;
-
- procedure TxUpgrader.SetVersion(Value: Integer);
- begin
- fIniFile.WriteInteger(fSection,INI_VERSION,Value);
- fIniFile.WriteString(fSection,'V'+IntToStr(Value),DateTimeToStr(Now));
- end;
-
- function TxUpgrader.GetVersion: Integer;
- begin
- Result := fIniFile.ReadInteger(fSection,INI_VERSION,100);
- end;
-
- procedure TxUpgrader.Execute;
- var
- oldVersion,
- aVersion: Integer;
- begin
- aVersion:=GetVersion;
- while oldVersion<>aVersion do begin
- oldVersion:=aVersion;
- aVersion:=Upgrade(aVersion);
- if aVersion<>oldVersion then
- SetVersion(aVersion);
- end;
- end;
-
- function TxUpgrader.Upgrade(aVersion: Integer): Integer;
- begin
- Result:=aVersion;
- if aVersion < 110 then
- try
- Result := 110
- except
- end
- else if aVersion < 120 then
- Result := 120;
- end;
-
- end.
-